const Base = require('./base.js');

module.exports = class extends Base {
  _isCheckLogin() {
    return true; // 确保用户登录后才能操作购物车
  }

  // 获取购物车
  async getCartAction() {
    try {
      // 获取当前登录用户
      const user = await this.ctx.session('login');
      if (!user || !user.id) {
        return this.fail('用户未登录，请先登录');
      }

      // 查询当前用户的购物车
      const cartModel = think.model('cart');
      const cartItems = await cartModel.where({ user_id: user.id }).select();

      // 判断购物车是否为空
      if (think.isEmpty(cartItems)) {
        return this.success([], '购物车为空');
      }

      // 查询商品信息并处理图片路径
      const goodsModel = think.model('goods');
      const enrichedCartItems = [];
      for (const cartItem of cartItems) {
        const goods = await goodsModel.where({ id: cartItem.goods_id }).find();
        if (!think.isEmpty(goods)) {
          enrichedCartItems.push({
            ...cartItem,
            goods_name: goods.name, // 商品名称
            goods_price: goods.price, // 商品价格
            picture: goods.picture ? this.getStaticURL(goods.picture) : null // 商品图片路径
          });
        }
      }

      return this.success(enrichedCartItems, '获取购物车成功');
    } catch (error) {
      console.error('获取购物车时发生错误:', error);
      return this.fail('获取购物车失败，请稍后再试');
    }
  }

  // 添加购物车
  async addToCartAction() {
    try {
      // 获取当前用户信息
      const user = await this.ctx.session('login');
      if (!user || !user.id) {
        return this.fail('用户未登录，请先登录');
      }

      // 获取前端传递的参数
      const { goods_id, num } = this.post();

      // 参数校验
      if (!goods_id || !Number.isInteger(num) || num <= 0) {
        return this.fail('商品 ID 或数量无效');
      }

      // 初始化购物车模型
      const cartModel = think.model('cart');

      // 检查购物车中是否已有该商品
      const existingItem = await cartModel.where({ user_id: user.id, goods_id }).find();

      if (think.isEmpty(existingItem)) {
        // 商品不在购物车中，添加新记录
        await cartModel.add({
          user_id: user.id,
          goods_id,
          num
        });
      } else {
        // 商品已存在，更新数量
        await cartModel.where({ id: existingItem.id }).update({
          num: existingItem.num + num
        });
      }

      return this.success({}, '商品已添加到购物车');
    } catch (error) {
      console.error('添加商品到购物车时发生错误:', error);
      return this.fail('添加商品到购物车失败，请稍后再试');
    }
  }

  // 更新购物车商品数量
  async updateCartAction() {
    const user = await this.ctx.session('login');
    const { goods_id, num } = this.post();

    if (!goods_id || num <= 0) {
      return this.fail('商品 ID 或数量无效');
    }

    const cartModel = think.model('cart');

    // 更新购物车中商品的数量
    const result = await cartModel.where({ user_id: user.id, goods_id }).update({ num });

    if (result) {
      return this.success({}, '购物车已更新');
    } else {
      return this.fail('购物车更新失败');
    }
  }

  // 删除购物车中的商品
  async removeFromCartAction() {
    const user = await this.ctx.session('login');
    const { goods_id } = this.post();
    if (!goods_id) {
      return this.fail('商品 ID 无效');
    }
    const cartModel = think.model('cart');
    // 删除购物车中的商品
    const result = await cartModel.where({ user_id: user.id, goods_id }).delete();
    if (result) {
      return this.success({}, '商品已从购物车中移除');
    } else {
      return this.fail('商品移除失败');
    }
  }

  // 购买购物车中的商品
  async buyCartAction() {
    const user = await this.ctx.session('login');
    const { goods_id } = this.post();
    if (!goods_id) {
      return this.fail('商品 ID 无效');
    }
    const cartModel = think.model('cart');
    // 删除购物车中的商品
    const result = await cartModel.where({ user_id: user.id, goods_id }).delete();
    if (result) {
      return this.success({}, '购买成功，即将返回购物车');
    } else {
      return this.fail('商品移除失败');
    }
  }

  // async cartInfoAction() {
  //   const input = {
  //     ids: this.get('ids')
  //   };
  //   const carts = think.model('goods');
  //   const data = await carts.where({ id: ['IN', input.ids] }).select();
  //   data.forEach(item => {
  //     item.picture = this.getStaticURL(item.picture);
  //   });
  //   return this.success(data);
  // }
};
